package org.example;

import org.example.simple_1.stateMachineConfig.OrderStateMachine;
import org.example.simple_1.web.OrderController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.statemachine.state.AbstractState;

import java.util.HashMap;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class App implements CommandLineRunner {
    @Autowired
    private OrderController controller;

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        // stringStringHashMap.put("event",OrderStateMachine.Events.START_PROCESS);
        // stringStringHashMap.put("event",OrderStateMachine.Events.PAY);  // 值得注意的时,如果指定的其实状态和 对应的 转换事件对应不上的话,状态不会进行流转的
        stringStringHashMap.put("event",OrderStateMachine.Events.APPROVE);
        /**
         * 没有定义从 PROCESSING 到其他状态的转换（transition）来响应 APPROVE 这个事件
         *      Spring State Machine 的行为逻辑如下：
         *          ✅ 1. 状态机找不到匹配的转换时，默认行为是：
         *              不会改变状态
         *              不抛出异常
         *              触发一个未处理事件（unhandled event）
         *      你可以通过添加监听器或日志来捕获这个行为
         *          1. 添加监听器并重写 eventNotAccepted() 方法
         *          2. 使用 onTransitionFailed 或自定义错误处理策略
         *
         */
        controller.sendEvent("123", stringStringHashMap);
        System.exit(1);
    }
}

